<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Cheetah Software: HardwareBridge.cpp Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Cheetah Software
   &#160;<span id="projectnumber">1.0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="../../namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="../../annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="../../search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
      <li><a href="../../globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('d9/da0/_hardware_bridge_8cpp_source.html','../../');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">HardwareBridge.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="../../d9/da0/_hardware_bridge_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dd5/_hardware_bridge_8h.html">HardwareBridge.h</a>&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#include &lt;sys/mman.h&gt;</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d4/dd2/rt__interface__lcm_8h.html">rt/rt_interface_lcm.h</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d1/d95/rt__sbus_8h.html">rt/rt_sbus.h</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d0/dae/rt__spi_8h.html">rt/rt_spi.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d3/dee/rt__vectornav_8h.html">rt/rt_vectornav.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">   17</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">HardwareBridge::initError</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* reason, <span class="keywordtype">bool</span> printErrno) {</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;  printf(<span class="stringliteral">&quot;FAILED TO INITIALIZE HARDWARE: %s\n&quot;</span>, reason);</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;  <span class="keywordflow">if</span> (printErrno) {</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    printf(<span class="stringliteral">&quot;Error: %s\n&quot;</span>, strerror(errno));</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;  }</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;  exit(-1);</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;}</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#a4a8078bc3b30d7260281598990243262">   30</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4a8078bc3b30d7260281598990243262">HardwareBridge::initCommon</a>() {</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  printf(<span class="stringliteral">&quot;[HardwareBridge] Init stack\n&quot;</span>);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#abbe4b85c2153d1c4f9718b678587cc7b">prefaultStack</a>();</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  printf(<span class="stringliteral">&quot;[HardwareBridge] Init scheduler\n&quot;</span>);</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a6b4e33274b7f6f1a78987d9b5480f9b5">setupScheduler</a>();</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4407e65acb5e3afc54adee8adeb5627f">_interfaceLCM</a>.good()) {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">initError</a>(<span class="stringliteral">&quot;_interfaceLCM failed to initialize\n&quot;</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  }</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  printf(<span class="stringliteral">&quot;[HardwareBridge] Subscribe LCM\n&quot;</span>);</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4407e65acb5e3afc54adee8adeb5627f">_interfaceLCM</a>.subscribe(<span class="stringliteral">&quot;interface&quot;</span>, &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae6905c9dcc7d67badb4bcd79ef6f62a1">HardwareBridge::handleGamepadLCM</a>, <span class="keyword">this</span>);</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4407e65acb5e3afc54adee8adeb5627f">_interfaceLCM</a>.subscribe(<span class="stringliteral">&quot;interface_request&quot;</span>,</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;                          &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa5bd1ccd29e15e2f0ecb5b3f65795784">HardwareBridge::handleControlParameter</a>, <span class="keyword">this</span>);</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;  printf(<span class="stringliteral">&quot;[HardwareBridge] Start interface LCM handler\n&quot;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#aac1696d3ecb97c660ffd9a13771892a9">_interfaceLcmThread</a> = std::thread(&amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa6d23f7fccce82cb3a351dd48c4433be">HardwareBridge::handleInterfaceLCM</a>, <span class="keyword">this</span>);</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#aa6d23f7fccce82cb3a351dd48c4433be">   48</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa6d23f7fccce82cb3a351dd48c4433be">HardwareBridge::handleInterfaceLCM</a>() {</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  <span class="keywordflow">while</span> (!<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa78e0f3c26667723c9501963aafa9173">_interfaceLcmQuit</a>) <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4407e65acb5e3afc54adee8adeb5627f">_interfaceLCM</a>.handle();</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;}</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#abbe4b85c2153d1c4f9718b678587cc7b">   60</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#abbe4b85c2153d1c4f9718b678587cc7b">HardwareBridge::prefaultStack</a>() {</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  printf(<span class="stringliteral">&quot;[Init] Prefault stack...\n&quot;</span>);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keyword">volatile</span> <span class="keywordtype">char</span> stack[<a class="code" href="../../d6/dd5/_hardware_bridge_8h.html#accbb358028675c83675d8b34c386268d">MAX_STACK_SIZE</a>];</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  memset(const_cast&lt;char*&gt;(stack), 0, <a class="code" href="../../d6/dd5/_hardware_bridge_8h.html#accbb358028675c83675d8b34c386268d">MAX_STACK_SIZE</a>);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="keywordflow">if</span> (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) {</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">initError</a>(</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        <span class="stringliteral">&quot;mlockall failed.  This is likely because you didn&#39;t run robot as &quot;</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="stringliteral">&quot;root.\n&quot;</span>,</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        <span class="keyword">true</span>);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  }</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#a6b4e33274b7f6f1a78987d9b5480f9b5">   75</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a6b4e33274b7f6f1a78987d9b5480f9b5">HardwareBridge::setupScheduler</a>() {</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  printf(<span class="stringliteral">&quot;[Init] Setup RT Scheduler...\n&quot;</span>);</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="keyword">struct </span>sched_param params;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  params.sched_priority = <a class="code" href="../../d6/dd5/_hardware_bridge_8h.html#a82dd0a9ae27bdb2c3cdd33bb7804861c">TASK_PRIORITY</a>;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="keywordflow">if</span> (sched_setscheduler(0, SCHED_FIFO, &amp;params) == -1) {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">initError</a>(<span class="stringliteral">&quot;sched_setscheduler failed.\n&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  }</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;}</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#ae6905c9dcc7d67badb4bcd79ef6f62a1">   84</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae6905c9dcc7d67badb4bcd79ef6f62a1">HardwareBridge::handleGamepadLCM</a>(<span class="keyword">const</span> lcm::ReceiveBuffer* rbuf,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                                      <span class="keyword">const</span> std::string&amp; chan,</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                                      <span class="keyword">const</span> gamepad_lcmt* msg) {</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  (void)rbuf;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  (void)chan;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a0928b007abfd50e0edc7d38de4bce932">_gamepadCommand</a>.<a class="code" href="../../d4/d51/struct_gamepad_command.html#ae4c2dcd871479b0a41b942736a2698a3">set</a>(msg);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;}</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#aa5bd1ccd29e15e2f0ecb5b3f65795784">   92</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa5bd1ccd29e15e2f0ecb5b3f65795784">HardwareBridge::handleControlParameter</a>(</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <span class="keyword">const</span> lcm::ReceiveBuffer* rbuf, <span class="keyword">const</span> std::string&amp; chan,</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="keyword">const</span> control_parameter_request_lcmt* msg) {</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  (void)rbuf;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  (void)chan;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keywordflow">if</span> (msg-&gt;requestNumber &lt;= <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.requestNumber) {</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="comment">// nothing to do!</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    printf(</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        <span class="stringliteral">&quot;[HardwareBridge] Warning: the interface has run a ControlParameter &quot;</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        <span class="stringliteral">&quot;iteration, but there is no new request!\n&quot;</span>);</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="comment">// return;</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  }</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="comment">// sanity check</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <a class="code" href="../../d0/d99/c_types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a> nRequests = msg-&gt;requestNumber - <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.requestNumber;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <span class="keywordflow">if</span> (nRequests != 1) {</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    printf(<span class="stringliteral">&quot;[ERROR] Hardware bridge: we&#39;ve missed %ld requests\n&quot;</span>,</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;           nRequests - 1);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  }</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="keywordflow">switch</span> (msg-&gt;requestKind) {</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordflow">case</span> (<a class="code" href="../../d0/d99/c_types_8h.html#a9e382f207c65ca13ab4ae98363aeda80">s8</a>)<a class="code" href="../../d6/de9/_control_parameter_interface_8h.html#ae6908d6ad8ae0bc7a200141e0c292508a7cd01036768fe3a9f7f5cccc148f833e">ControlParameterRequestKind::SET_USER_PARAM_BY_NAME</a>: {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;      <span class="keywordflow">if</span>(!<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ab8487082663e527210d4e1d89387902b">_userControlParameters</a>) {</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        printf(<span class="stringliteral">&quot;[Warning] Got user param %s, but not using user parameters!\n&quot;</span>,</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;               (<span class="keywordtype">char</span>*)msg-&gt;name);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        std::string name((<span class="keywordtype">char</span>*)msg-&gt;name);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        <a class="code" href="../../da/d98/class_control_parameter.html">ControlParameter</a>&amp; param = <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ab8487082663e527210d4e1d89387902b">_userControlParameters</a>-&gt;<a class="code" href="../../d8/d86/class_control_parameters.html#ab42dff0f07e88bf44c831238dd4ce96f">collection</a>.<a class="code" href="../../dd/da1/class_control_parameter_collection.html#a9e6262aa46992ca879b50d70df030a56">lookup</a>(name);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        <span class="comment">// type check</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <span class="keywordflow">if</span> ((<a class="code" href="../../d0/d99/c_types_8h.html#a9e382f207c65ca13ab4ae98363aeda80">s8</a>)param.<a class="code" href="../../da/d98/class_control_parameter.html#a9bfcef0e53e248af51d60e013609ce8f">_kind</a> != msg-&gt;parameterKind) {</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;          <span class="keywordflow">throw</span> std::runtime_error(</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;              <span class="stringliteral">&quot;type mismatch for parameter &quot;</span> + name + <span class="stringliteral">&quot;, robot thinks it is &quot;</span> +</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;              <a class="code" href="../../d2/d01/_control_parameters_8h.html#a39a31ac35492a7e98110f7301430b5fe">controlParameterValueKindToString</a>(param.<a class="code" href="../../da/d98/class_control_parameter.html#a9bfcef0e53e248af51d60e013609ce8f">_kind</a>) +</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;              <span class="stringliteral">&quot; but received a command to set it to &quot;</span> +</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;              <a class="code" href="../../d2/d01/_control_parameters_8h.html#a39a31ac35492a7e98110f7301430b5fe">controlParameterValueKindToString</a>(</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                  (<a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a>)msg-&gt;parameterKind));</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        }</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <span class="comment">// do the actual set</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        <a class="code" href="../../df/df2/union_control_parameter_value.html">ControlParameterValue</a> v;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        memcpy(&amp;v, msg-&gt;value, <span class="keyword">sizeof</span>(v));</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        param.<a class="code" href="../../da/d98/class_control_parameter.html#ac508d1f24bf918c65d717f5389553e83">set</a>(v, (<a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a>)msg-&gt;parameterKind);</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="comment">// respond:</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.requestNumber =</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;            msg-&gt;requestNumber;  <span class="comment">// acknowledge that the set has happened</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.parameterKind =</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;            msg-&gt;parameterKind;  <span class="comment">// just for debugging print statements</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        memcpy(<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.value, msg-&gt;value, 64);</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="comment">//_parameter_response_lcmt.value = _parameter_request_lcmt.value; // just</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="comment">//for debugging print statements</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        strcpy((<span class="keywordtype">char</span>*)<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.name,</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;               name.c_str());  <span class="comment">// just for debugging print statements</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.requestKind = msg-&gt;requestKind;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        printf(<span class="stringliteral">&quot;[User Control Parameter] set %s to %s\n&quot;</span>, name.c_str(),</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;               <a class="code" href="../../d2/d01/_control_parameters_8h.html#a845e4adacbcbd157527c891bb3fa4b74">controlParameterValueToString</a>(</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                   v, (<a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a>)msg-&gt;parameterKind)</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                   .c_str());</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      }</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    } <span class="keywordflow">break</span>;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keywordflow">case</span> (<a class="code" href="../../d0/d99/c_types_8h.html#a9e382f207c65ca13ab4ae98363aeda80">s8</a>)<a class="code" href="../../d6/de9/_control_parameter_interface_8h.html#ae6908d6ad8ae0bc7a200141e0c292508a592d3b9333f88bfabfaa2b00fb225ebb">ControlParameterRequestKind::SET_ROBOT_PARAM_BY_NAME</a>: {</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      std::string name((<span class="keywordtype">char</span>*)msg-&gt;name);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      <a class="code" href="../../da/d98/class_control_parameter.html">ControlParameter</a>&amp; param = <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ad52a70b35d6c19a736ea3287d974c66d">_robotParams</a>.<a class="code" href="../../d8/d86/class_control_parameters.html#ab42dff0f07e88bf44c831238dd4ce96f">collection</a>.<a class="code" href="../../dd/da1/class_control_parameter_collection.html#a9e6262aa46992ca879b50d70df030a56">lookup</a>(name);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      <span class="comment">// type check</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;      <span class="keywordflow">if</span> ((<a class="code" href="../../d0/d99/c_types_8h.html#a9e382f207c65ca13ab4ae98363aeda80">s8</a>)param.<a class="code" href="../../da/d98/class_control_parameter.html#a9bfcef0e53e248af51d60e013609ce8f">_kind</a> != msg-&gt;parameterKind) {</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;            <span class="stringliteral">&quot;type mismatch for parameter &quot;</span> + name + <span class="stringliteral">&quot;, robot thinks it is &quot;</span> +</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            <a class="code" href="../../d2/d01/_control_parameters_8h.html#a39a31ac35492a7e98110f7301430b5fe">controlParameterValueKindToString</a>(param.<a class="code" href="../../da/d98/class_control_parameter.html#a9bfcef0e53e248af51d60e013609ce8f">_kind</a>) +</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;            <span class="stringliteral">&quot; but received a command to set it to &quot;</span> +</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            <a class="code" href="../../d2/d01/_control_parameters_8h.html#a39a31ac35492a7e98110f7301430b5fe">controlParameterValueKindToString</a>(</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;                (<a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a>)msg-&gt;parameterKind));</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      }</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      <span class="comment">// do the actual set</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      <a class="code" href="../../df/df2/union_control_parameter_value.html">ControlParameterValue</a> v;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      memcpy(&amp;v, msg-&gt;value, <span class="keyword">sizeof</span>(v));</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;      param.<a class="code" href="../../da/d98/class_control_parameter.html#ac508d1f24bf918c65d717f5389553e83">set</a>(v, (<a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a>)msg-&gt;parameterKind);</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      <span class="comment">// respond:</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;      <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.requestNumber =</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;          msg-&gt;requestNumber;  <span class="comment">// acknowledge that the set has happened</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.parameterKind =</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;          msg-&gt;parameterKind;  <span class="comment">// just for debugging print statements</span></div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;      memcpy(<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.value, msg-&gt;value, 64);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;      <span class="comment">//_parameter_response_lcmt.value = _parameter_request_lcmt.value; // just</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      <span class="comment">//for debugging print statements</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      strcpy((<span class="keywordtype">char</span>*)<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.name,</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;             name.c_str());  <span class="comment">// just for debugging print statements</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>.requestKind = msg-&gt;requestKind;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      printf(<span class="stringliteral">&quot;[Robot Control Parameter] set %s to %s\n&quot;</span>, name.c_str(),</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;             <a class="code" href="../../d2/d01/_control_parameters_8h.html#a845e4adacbcbd157527c891bb3fa4b74">controlParameterValueToString</a>(</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                 v, (<a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a>)msg-&gt;parameterKind)</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;                 .c_str());</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    } <span class="keywordflow">break</span>;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;parameter type unsupported&quot;</span>);</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    }</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <span class="keywordflow">break</span>;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  }</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4407e65acb5e3afc54adee8adeb5627f">_interfaceLCM</a>.publish(<span class="stringliteral">&quot;interface_response&quot;</span>, &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">_parameter_response_lcmt</a>);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;}</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#a4c281b577cbb4c66b8844784275bf526">  201</a></span>&#160;<a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#a4c281b577cbb4c66b8844784275bf526">MiniCheetahHardwareBridge::MiniCheetahHardwareBridge</a>(<a class="code" href="../../d4/d6a/class_robot_controller.html">RobotController</a>* robot_ctrl)</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    : <a class="code" href="../../d8/dd8/class_hardware_bridge.html">HardwareBridge</a>(robot_ctrl), _spiLcm(<a class="code" href="../../de/df0/utilities_8h.html#aa3945f023f4c554ec5670ac03ff82525">getLcmUrl</a>(255)) {}</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#a685c0e118f44327e7734119bd232d484">  204</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#a685c0e118f44327e7734119bd232d484">MiniCheetahHardwareBridge::run</a>() {</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a4a8078bc3b30d7260281598990243262">initCommon</a>();</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa2ed52f47d4bfb659e1d4d74930774dc">initHardware</a>();</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  <span class="comment">//_robotRunner = new RobotRunner(&amp;taskManager, 0.001f, &quot;robot-control&quot;);</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#ab68a04d6b506333426883633a6430656">driverCommand</a> = &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a0928b007abfd50e0edc7d38de4bce932">_gamepadCommand</a>;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#a58767b23c3b78f2d6f7a5af7474d39cf">spiData</a> = &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa700e6321dfd8badb647e198349d3fb7">_spiData</a>;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#a13f4f83d3364befdad7a218f2c16afbb">spiCommand</a> = &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a5ccd0cdd11a61439a08f8f7301f3294f">_spiCommand</a>;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#ac36f7f6395167f998afe23f6d4f86c82">robotType</a> = <a class="code" href="../../d9/d8e/cpp_types_8h.html#a78d284d08fd22d809fd436256f2cbc39a590425b506eb87eff1a64ed14ffd1498">RobotType::MINI_CHEETAH</a>;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#a556fa8680fbd044ace2e0ac66db6c0ff">vectorNavData</a> = &amp;<a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa99804e2d2e2041ab988f34f15e385ae">_vectorNavData</a>;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#a1738f8f82abdedc10c25e0360fba2dec">controlParameters</a> = &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ad52a70b35d6c19a736ea3287d974c66d">_robotParams</a>;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#a8c74848e52f20b1294d650641f40ea4f">visualizationData</a> = &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ac5270dbb17267e1ac3681ce92215296b">_visualizationData</a>;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#ad49f79affbf6c35d4c8ac21a50cb8ae3">cheetahMainVisualization</a> = &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#af9442d44776906a9a3c9cea911784891">_mainCheetahVisualization</a>;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keywordflow">while</span> (!<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ad52a70b35d6c19a736ea3287d974c66d">_robotParams</a>.<a class="code" href="../../d8/d86/class_control_parameters.html#a12b144b3d659080b6e0bfd93569b566e">isFullyInitialized</a>()) {</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    printf(<span class="stringliteral">&quot;[Hardware Bridge] Waiting for robot parameters...\n&quot;</span>);</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    usleep(1000000);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  }</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <span class="keywordflow">if</span>(<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ab8487082663e527210d4e1d89387902b">_userControlParameters</a>) {</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordflow">while</span> (!<a class="code" href="../../d8/dd8/class_hardware_bridge.html#ab8487082663e527210d4e1d89387902b">_userControlParameters</a>-&gt;<a class="code" href="../../d8/d86/class_control_parameters.html#a12b144b3d659080b6e0bfd93569b566e">isFullyInitialized</a>()) {</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      printf(<span class="stringliteral">&quot;[Hardware Bridge] Waiting for user parameters...\n&quot;</span>);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      usleep(1000000);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    }</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  }</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  printf(<span class="stringliteral">&quot;[Hardware Bridge] Got all parameters, starting up!\n&quot;</span>);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../d9/d42/class_robot_runner.html#affa2cfda073a7b1742561154c3081ae5">init</a>();</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a80a343c681ff51562b875190a7b2f4dc">_firstRun</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  <span class="comment">// init control thread</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa63048fffaaddf1c55a8f18a785396ec">statusTask</a>.<a class="code" href="../../de/d2f/class_periodic_task.html#a23a65ac2dff9750a0f0d6416f2f32a6f">start</a>();</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="comment">// spi Task start</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <a class="code" href="../../dd/de7/class_periodic_member_function.html">PeriodicMemberFunction&lt;MiniCheetahHardwareBridge&gt;</a> spiTask(</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;      &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a0389f737fe143e8a4bbf9433c129d149">taskManager</a>, .002, <span class="stringliteral">&quot;spi&quot;</span>, &amp;<a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#ac33018c7266f82d92828cfda21b9b6b2">MiniCheetahHardwareBridge::runSpi</a>, <span class="keyword">this</span>);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  spiTask.<a class="code" href="../../de/d2f/class_periodic_task.html#a23a65ac2dff9750a0f0d6416f2f32a6f">start</a>();</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <span class="comment">// robot controller start</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">_robotRunner</a>-&gt;<a class="code" href="../../de/d2f/class_periodic_task.html#a23a65ac2dff9750a0f0d6416f2f32a6f">start</a>();</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="comment">// visualization start</span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  <a class="code" href="../../dd/de7/class_periodic_member_function.html">PeriodicMemberFunction&lt;MiniCheetahHardwareBridge&gt;</a> visualizationLCMTask(</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;      &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a0389f737fe143e8a4bbf9433c129d149">taskManager</a>, .0167, <span class="stringliteral">&quot;lcm-vis&quot;</span>,</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;      &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a83a317be30bef73635e34beb19a303ac">MiniCheetahHardwareBridge::publishVisualizationLCM</a>, <span class="keyword">this</span>);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  visualizationLCMTask.<a class="code" href="../../de/d2f/class_periodic_task.html#a23a65ac2dff9750a0f0d6416f2f32a6f">start</a>();</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="comment">// rc controller</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#aeb8b07d91413a757e0085ad8ac5fa300">_port</a> = <a class="code" href="../../d1/d95/rt__sbus_8h.html#a1f8bbf50154d9822f453616920c26127">init_sbus</a>(<span class="keyword">false</span>);  <span class="comment">// Not Simulation</span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  <a class="code" href="../../dd/de7/class_periodic_member_function.html">PeriodicMemberFunction&lt;HardwareBridge&gt;</a> sbusTask(</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;      &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a0389f737fe143e8a4bbf9433c129d149">taskManager</a>, .005, <span class="stringliteral">&quot;rc_controller&quot;</span>, &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa3e2460f9609470b32190353d9da2cd9">HardwareBridge::run_sbus</a>, <span class="keyword">this</span>);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  sbusTask.<a class="code" href="../../de/d2f/class_periodic_task.html#a23a65ac2dff9750a0f0d6416f2f32a6f">start</a>();</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  <span class="keywordflow">for</span> (;;) {</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    usleep(1000000);</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="comment">// printf(&quot;joy %f\n&quot;, _robotRunner-&gt;driverCommand-&gt;leftStickAnalog[0]);</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  }</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;}</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#aa3e2460f9609470b32190353d9da2cd9">  266</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa3e2460f9609470b32190353d9da2cd9">HardwareBridge::run_sbus</a>() {</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aeb8b07d91413a757e0085ad8ac5fa300">_port</a> &gt; 0) {</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <span class="keywordtype">int</span> x = <a class="code" href="../../d1/d95/rt__sbus_8h.html#ab44d038981e16325d8aec78b2c1011bf">receive_sbus</a>(<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aeb8b07d91413a757e0085ad8ac5fa300">_port</a>);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">if</span> (x) {</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;      <a class="code" href="../../d4/dd2/rt__interface__lcm_8h.html#a3f348fdbac738fe554e4543dee262081">sbus_packet_complete</a>();</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  }</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;}</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa2ed52f47d4bfb659e1d4d74930774dc">  275</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa2ed52f47d4bfb659e1d4d74930774dc">MiniCheetahHardwareBridge::initHardware</a>() {</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  printf(<span class="stringliteral">&quot;[MiniCheetahHardware] Init vectornav\n&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa99804e2d2e2041ab988f34f15e385ae">_vectorNavData</a>.<a class="code" href="../../df/d06/struct_vector_nav_data.html#a373f86342f6a3c2b2b2ca995eb67ff58">quat</a> &lt;&lt; 1, 0, 0, 0;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="../../d3/dee/rt__vectornav_8h.html#aedc93ce31e71111cccb1c83ce82114de">init_vectornav</a>(&amp;<a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa99804e2d2e2041ab988f34f15e385ae">_vectorNavData</a>)) {</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">initError</a>(<span class="stringliteral">&quot;failed to initialize vectornav!\n&quot;</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  }</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  <a class="code" href="../../d0/dae/rt__spi_8h.html#a8eb9780a3438ec02c70314744f91f3c7">init_spi</a>();</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  <span class="comment">// init spi</span></div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  <span class="comment">// init sbus</span></div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;  <span class="comment">// init lidarlite</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  <span class="comment">// init LCM hardware logging thread</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;}</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#ac33018c7266f82d92828cfda21b9b6b2">  293</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#ac33018c7266f82d92828cfda21b9b6b2">MiniCheetahHardwareBridge::runSpi</a>() {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  spi_command_t* cmd = <a class="code" href="../../d0/dae/rt__spi_8h.html#a3e61e97e0ec55d0c36c2883793c12c08">get_spi_command</a>();</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  spi_data_t* data = <a class="code" href="../../d0/dae/rt__spi_8h.html#a86aa57487cebed6685ec3a22729662e6">get_spi_data</a>();</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  memcpy(cmd, &amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#a5ccd0cdd11a61439a08f8f7301f3294f">_spiCommand</a>, <span class="keyword">sizeof</span>(spi_command_t));</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  <a class="code" href="../../d0/dae/rt__spi_8h.html#a684e8d785e723147c81388a694a72454">spi_driver_run</a>();</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  memcpy(&amp;<a class="code" href="../../d8/dd8/class_hardware_bridge.html#aa700e6321dfd8badb647e198349d3fb7">_spiData</a>, data, <span class="keyword">sizeof</span>(spi_data_t));</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#acfed6143e7864dcb64345e22223455c1">_spiLcm</a>.publish(<span class="stringliteral">&quot;spi_data&quot;</span>, data);</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  <a class="code" href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#acfed6143e7864dcb64345e22223455c1">_spiLcm</a>.publish(<span class="stringliteral">&quot;spi_command&quot;</span>, cmd);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;}</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="../../d8/dd8/class_hardware_bridge.html#a83a317be30bef73635e34beb19a303ac">  305</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a83a317be30bef73635e34beb19a303ac">HardwareBridge::publishVisualizationLCM</a>() {</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  cheetah_visualization_lcmt visualization_data;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    visualization_data.x[i] = <a class="code" href="../../d8/dd8/class_hardware_bridge.html#af9442d44776906a9a3c9cea911784891">_mainCheetahVisualization</a>.<a class="code" href="../../d0/d6d/struct_cheetah_visualization.html#a0f858c48a4b04052b7f4f9346f796e3a">p</a>[i];</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  }</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 4; i++) {</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    visualization_data.quat[i] = <a class="code" href="../../d8/dd8/class_hardware_bridge.html#af9442d44776906a9a3c9cea911784891">_mainCheetahVisualization</a>.<a class="code" href="../../d0/d6d/struct_cheetah_visualization.html#acf5668b2a729eee91349f45010ac2940">quat</a>[i];</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    visualization_data.rgba[i] = <a class="code" href="../../d8/dd8/class_hardware_bridge.html#af9442d44776906a9a3c9cea911784891">_mainCheetahVisualization</a>.<a class="code" href="../../d0/d6d/struct_cheetah_visualization.html#a78d3a586c160f8ec983f65f1605bacb1">color</a>[i];</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  }</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 12; i++) {</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    visualization_data.q[i] = <a class="code" href="../../d8/dd8/class_hardware_bridge.html#af9442d44776906a9a3c9cea911784891">_mainCheetahVisualization</a>.<a class="code" href="../../d0/d6d/struct_cheetah_visualization.html#a0ce991af43feb270e6f6c3ac31c027cd">q</a>[i];</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  }</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  <a class="code" href="../../d8/dd8/class_hardware_bridge.html#a21be7448839aeabc1735129b851bfd42">_visualizationLCM</a>.publish(<span class="stringliteral">&quot;main_cheetah_visualization&quot;</span>, &amp;visualization_data);</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;}</div><div class="ttc" id="class_hardware_bridge_html_aa6d23f7fccce82cb3a351dd48c4433be"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aa6d23f7fccce82cb3a351dd48c4433be">HardwareBridge::handleInterfaceLCM</a></div><div class="ttdeci">void handleInterfaceLCM()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00048">HardwareBridge.cpp:48</a></div></div>
<div class="ttc" id="class_robot_runner_html_a13f4f83d3364befdad7a218f2c16afbb"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#a13f4f83d3364befdad7a218f2c16afbb">RobotRunner::spiCommand</a></div><div class="ttdeci">SpiCommand * spiCommand</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00051">RobotRunner.h:51</a></div></div>
<div class="ttc" id="cpp_types_8h_html_a78d284d08fd22d809fd436256f2cbc39a590425b506eb87eff1a64ed14ffd1498"><div class="ttname"><a href="../../d9/d8e/cpp_types_8h.html#a78d284d08fd22d809fd436256f2cbc39a590425b506eb87eff1a64ed14ffd1498">RobotType::MINI_CHEETAH</a></div></div>
<div class="ttc" id="_control_parameter_interface_8h_html_ae6908d6ad8ae0bc7a200141e0c292508a592d3b9333f88bfabfaa2b00fb225ebb"><div class="ttname"><a href="../../d6/de9/_control_parameter_interface_8h.html#ae6908d6ad8ae0bc7a200141e0c292508a592d3b9333f88bfabfaa2b00fb225ebb">ControlParameterRequestKind::SET_ROBOT_PARAM_BY_NAME</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a4b91d691aac1ad94f0c600e2ec2e084a"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a4b91d691aac1ad94f0c600e2ec2e084a">HardwareBridge::_parameter_response_lcmt</a></div><div class="ttdeci">control_parameter_respones_lcmt _parameter_response_lcmt</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00057">HardwareBridge.h:57</a></div></div>
<div class="ttc" id="struct_cheetah_visualization_html_a0ce991af43feb270e6f6c3ac31c027cd"><div class="ttname"><a href="../../d0/d6d/struct_cheetah_visualization.html#a0ce991af43feb270e6f6c3ac31c027cd">CheetahVisualization::q</a></div><div class="ttdeci">Vec12&lt; float &gt; q</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d0d/_visualization_data_8h_source.html#l00038">VisualizationData.h:38</a></div></div>
<div class="ttc" id="class_robot_runner_html_a58767b23c3b78f2d6f7a5af7474d39cf"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#a58767b23c3b78f2d6f7a5af7474d39cf">RobotRunner::spiData</a></div><div class="ttdeci">SpiData * spiData</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00050">RobotRunner.h:50</a></div></div>
<div class="ttc" id="class_control_parameters_html_ab42dff0f07e88bf44c831238dd4ce96f"><div class="ttname"><a href="../../d8/d86/class_control_parameters.html#ab42dff0f07e88bf44c831238dd4ce96f">ControlParameters::collection</a></div><div class="ttdeci">ControlParameterCollection collection</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00441">ControlParameters.h:441</a></div></div>
<div class="ttc" id="class_control_parameter_html_a9bfcef0e53e248af51d60e013609ce8f"><div class="ttname"><a href="../../da/d98/class_control_parameter.html#a9bfcef0e53e248af51d60e013609ce8f">ControlParameter::_kind</a></div><div class="ttdeci">ControlParameterValueKind _kind</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00381">ControlParameters.h:381</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_ab8487082663e527210d4e1d89387902b"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#ab8487082663e527210d4e1d89387902b">HardwareBridge::_userControlParameters</a></div><div class="ttdeci">ControlParameters * _userControlParameters</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00067">HardwareBridge.h:67</a></div></div>
<div class="ttc" id="class_mini_cheetah_hardware_bridge_html_acfed6143e7864dcb64345e22223455c1"><div class="ttname"><a href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#acfed6143e7864dcb64345e22223455c1">MiniCheetahHardwareBridge::_spiLcm</a></div><div class="ttdeci">lcm::LCM _spiLcm</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00083">HardwareBridge.h:83</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a83a317be30bef73635e34beb19a303ac"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a83a317be30bef73635e34beb19a303ac">HardwareBridge::publishVisualizationLCM</a></div><div class="ttdeci">void publishVisualizationLCM()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00305">HardwareBridge.cpp:305</a></div></div>
<div class="ttc" id="_hardware_bridge_8h_html"><div class="ttname"><a href="../../d6/dd5/_hardware_bridge_8h.html">HardwareBridge.h</a></div><div class="ttdoc">Interface between robot code and robot hardware. </div></div>
<div class="ttc" id="_control_parameters_8h_html_a09b572cf97f12b378290dee549d8ecc3"><div class="ttname"><a href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a></div><div class="ttdeci">ControlParameterValueKind</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00034">ControlParameters.h:34</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a0928b007abfd50e0edc7d38de4bce932"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a0928b007abfd50e0edc7d38de4bce932">HardwareBridge::_gamepadCommand</a></div><div class="ttdeci">GamepadCommand _gamepadCommand</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00052">HardwareBridge.h:52</a></div></div>
<div class="ttc" id="class_mini_cheetah_hardware_bridge_html_ac33018c7266f82d92828cfda21b9b6b2"><div class="ttname"><a href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#ac33018c7266f82d92828cfda21b9b6b2">MiniCheetahHardwareBridge::runSpi</a></div><div class="ttdeci">void runSpi()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00293">HardwareBridge.cpp:293</a></div></div>
<div class="ttc" id="_control_parameters_8h_html_a39a31ac35492a7e98110f7301430b5fe"><div class="ttname"><a href="../../d2/d01/_control_parameters_8h.html#a39a31ac35492a7e98110f7301430b5fe">controlParameterValueKindToString</a></div><div class="ttdeci">std::string controlParameterValueKindToString(ControlParameterValueKind valueKind)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d90/_control_parameters_8cpp_source.html#l00016">ControlParameters.cpp:16</a></div></div>
<div class="ttc" id="rt__vectornav_8h_html_aedc93ce31e71111cccb1c83ce82114de"><div class="ttname"><a href="../../d3/dee/rt__vectornav_8h.html#aedc93ce31e71111cccb1c83ce82114de">init_vectornav</a></div><div class="ttdeci">bool init_vectornav(VectorNavData *vd_data)</div><div class="ttdef"><b>Definition:</b> <a href="../../db/d9f/rt__vectornav_8cpp_source.html#l00032">rt_vectornav.cpp:32</a></div></div>
<div class="ttc" id="class_robot_controller_html"><div class="ttname"><a href="../../d4/d6a/class_robot_controller.html">RobotController</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d3/dff/_robot_controller_8h_source.html#l00010">RobotController.h:10</a></div></div>
<div class="ttc" id="class_robot_runner_html_a556fa8680fbd044ace2e0ac66db6c0ff"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#a556fa8680fbd044ace2e0ac66db6c0ff">RobotRunner::vectorNavData</a></div><div class="ttdeci">VectorNavData * vectorNavData</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00048">RobotRunner.h:48</a></div></div>
<div class="ttc" id="class_mini_cheetah_hardware_bridge_html_a4c281b577cbb4c66b8844784275bf526"><div class="ttname"><a href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#a4c281b577cbb4c66b8844784275bf526">MiniCheetahHardwareBridge::MiniCheetahHardwareBridge</a></div><div class="ttdeci">MiniCheetahHardwareBridge(RobotController *)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00201">HardwareBridge.cpp:201</a></div></div>
<div class="ttc" id="class_control_parameters_html_a12b144b3d659080b6e0bfd93569b566e"><div class="ttname"><a href="../../d8/d86/class_control_parameters.html#a12b144b3d659080b6e0bfd93569b566e">ControlParameters::isFullyInitialized</a></div><div class="ttdeci">bool isFullyInitialized()</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00403">ControlParameters.h:403</a></div></div>
<div class="ttc" id="rt__vectornav_8h_html"><div class="ttname"><a href="../../d3/dee/rt__vectornav_8h.html">rt_vectornav.h</a></div></div>
<div class="ttc" id="rt__interface__lcm_8h_html"><div class="ttname"><a href="../../d4/dd2/rt__interface__lcm_8h.html">rt_interface_lcm.h</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aa78e0f3c26667723c9501963aafa9173"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aa78e0f3c26667723c9501963aafa9173">HardwareBridge::_interfaceLcmQuit</a></div><div class="ttdeci">volatile bool _interfaceLcmQuit</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00066">HardwareBridge.h:66</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a80a343c681ff51562b875190a7b2f4dc"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a80a343c681ff51562b875190a7b2f4dc">HardwareBridge::_firstRun</a></div><div class="ttdeci">bool _firstRun</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00061">HardwareBridge.h:61</a></div></div>
<div class="ttc" id="class_control_parameter_html"><div class="ttname"><a href="../../da/d98/class_control_parameter.html">ControlParameter</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00120">ControlParameters.h:120</a></div></div>
<div class="ttc" id="struct_cheetah_visualization_html_acf5668b2a729eee91349f45010ac2940"><div class="ttname"><a href="../../d0/d6d/struct_cheetah_visualization.html#acf5668b2a729eee91349f45010ac2940">CheetahVisualization::quat</a></div><div class="ttdeci">Quat&lt; float &gt; quat</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d0d/_visualization_data_8h_source.html#l00039">VisualizationData.h:39</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a4407e65acb5e3afc54adee8adeb5627f"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a4407e65acb5e3afc54adee8adeb5627f">HardwareBridge::_interfaceLCM</a></div><div class="ttdeci">lcm::LCM _interfaceLCM</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00055">HardwareBridge.h:55</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a5ccd0cdd11a61439a08f8f7301f3294f"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a5ccd0cdd11a61439a08f8f7301f3294f">HardwareBridge::_spiCommand</a></div><div class="ttdeci">SpiCommand _spiCommand</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00059">HardwareBridge.h:59</a></div></div>
<div class="ttc" id="_control_parameter_interface_8h_html_ae6908d6ad8ae0bc7a200141e0c292508a7cd01036768fe3a9f7f5cccc148f833e"><div class="ttname"><a href="../../d6/de9/_control_parameter_interface_8h.html#ae6908d6ad8ae0bc7a200141e0c292508a7cd01036768fe3a9f7f5cccc148f833e">ControlParameterRequestKind::SET_USER_PARAM_BY_NAME</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_ac5270dbb17267e1ac3681ce92215296b"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#ac5270dbb17267e1ac3681ce92215296b">HardwareBridge::_visualizationData</a></div><div class="ttdeci">VisualizationData _visualizationData</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00053">HardwareBridge.h:53</a></div></div>
<div class="ttc" id="struct_cheetah_visualization_html_a0f858c48a4b04052b7f4f9346f796e3a"><div class="ttname"><a href="../../d0/d6d/struct_cheetah_visualization.html#a0f858c48a4b04052b7f4f9346f796e3a">CheetahVisualization::p</a></div><div class="ttdeci">Vec3&lt; float &gt; p</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d0d/_visualization_data_8h_source.html#l00040">VisualizationData.h:40</a></div></div>
<div class="ttc" id="union_control_parameter_value_html"><div class="ttname"><a href="../../df/df2/union_control_parameter_value.html">ControlParameterValue</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00055">ControlParameters.h:55</a></div></div>
<div class="ttc" id="c_types_8h_html_a350c6fc928e3bdc6c6486268ac8fb269"><div class="ttname"><a href="../../d0/d99/c_types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a></div><div class="ttdeci">int64_t s64</div><div class="ttdef"><b>Definition:</b> <a href="../../d0/d99/c_types_8h_source.html#l00024">cTypes.h:24</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aa5bd1ccd29e15e2f0ecb5b3f65795784"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aa5bd1ccd29e15e2f0ecb5b3f65795784">HardwareBridge::handleControlParameter</a></div><div class="ttdeci">void handleControlParameter(const lcm::ReceiveBuffer *rbuf, const std::string &amp;chan, const control_parameter_request_lcmt *msg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00092">HardwareBridge.cpp:92</a></div></div>
<div class="ttc" id="class_mini_cheetah_hardware_bridge_html_a685c0e118f44327e7734119bd232d484"><div class="ttname"><a href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#a685c0e118f44327e7734119bd232d484">MiniCheetahHardwareBridge::run</a></div><div class="ttdeci">void run()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00204">HardwareBridge.cpp:204</a></div></div>
<div class="ttc" id="utilities_8h_html_aa3945f023f4c554ec5670ac03ff82525"><div class="ttname"><a href="../../de/df0/utilities_8h.html#aa3945f023f4c554ec5670ac03ff82525">getLcmUrl</a></div><div class="ttdeci">std::string getLcmUrl(s64 ttl)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/da5/utilities_8cpp_source.html#l00032">utilities.cpp:32</a></div></div>
<div class="ttc" id="class_robot_runner_html_affa2cfda073a7b1742561154c3081ae5"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#affa2cfda073a7b1742561154c3081ae5">RobotRunner::init</a></div><div class="ttdeci">void init() override</div><div class="ttdef"><b>Definition:</b> <a href="../../db/d28/_robot_runner_8cpp_source.html#l00028">RobotRunner.cpp:28</a></div></div>
<div class="ttc" id="class_control_parameter_html_ac508d1f24bf918c65d717f5389553e83"><div class="ttname"><a href="../../da/d98/class_control_parameter.html#ac508d1f24bf918c65d717f5389553e83">ControlParameter::set</a></div><div class="ttdeci">void set(ControlParameterValue value, ControlParameterValueKind kind)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00252">ControlParameters.h:252</a></div></div>
<div class="ttc" id="class_mini_cheetah_hardware_bridge_html_aa2ed52f47d4bfb659e1d4d74930774dc"><div class="ttname"><a href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa2ed52f47d4bfb659e1d4d74930774dc">MiniCheetahHardwareBridge::initHardware</a></div><div class="ttdeci">void initHardware()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00275">HardwareBridge.cpp:275</a></div></div>
<div class="ttc" id="rt__interface__lcm_8h_html_a3f348fdbac738fe554e4543dee262081"><div class="ttname"><a href="../../d4/dd2/rt__interface__lcm_8h.html#a3f348fdbac738fe554e4543dee262081">sbus_packet_complete</a></div><div class="ttdeci">void sbus_packet_complete()</div><div class="ttdoc">Function which handles the completion of an SBUS Packet and overrides the LCM control settings as des...</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/df1/rt__interface__lcm_8cpp_source.html#l00078">rt_interface_lcm.cpp:78</a></div></div>
<div class="ttc" id="class_robot_runner_html_ab68a04d6b506333426883633a6430656"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#ab68a04d6b506333426883633a6430656">RobotRunner::driverCommand</a></div><div class="ttdeci">GamepadCommand * driverCommand</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00046">RobotRunner.h:46</a></div></div>
<div class="ttc" id="class_robot_runner_html_ad49f79affbf6c35d4c8ac21a50cb8ae3"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#ad49f79affbf6c35d4c8ac21a50cb8ae3">RobotRunner::cheetahMainVisualization</a></div><div class="ttdeci">CheetahVisualization * cheetahMainVisualization</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00056">RobotRunner.h:56</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a21be7448839aeabc1735129b851bfd42"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a21be7448839aeabc1735129b851bfd42">HardwareBridge::_visualizationLCM</a></div><div class="ttdeci">lcm::LCM _visualizationLCM</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00056">HardwareBridge.h:56</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aeb8b07d91413a757e0085ad8ac5fa300"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aeb8b07d91413a757e0085ad8ac5fa300">HardwareBridge::_port</a></div><div class="ttdeci">int _port</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00069">HardwareBridge.h:69</a></div></div>
<div class="ttc" id="rt__sbus_8h_html_a1f8bbf50154d9822f453616920c26127"><div class="ttname"><a href="../../d1/d95/rt__sbus_8h.html#a1f8bbf50154d9822f453616920c26127">init_sbus</a></div><div class="ttdeci">int init_sbus(int is_simulator)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/dad/rt__sbus_8cpp_source.html#l00119">rt_sbus.cpp:119</a></div></div>
<div class="ttc" id="rt__spi_8h_html_a684e8d785e723147c81388a694a72454"><div class="ttname"><a href="../../d0/dae/rt__spi_8h.html#a684e8d785e723147c81388a694a72454">spi_driver_run</a></div><div class="ttdeci">void spi_driver_run()</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/d62/rt__spi_8cpp_source.html#l00319">rt_spi.cpp:319</a></div></div>
<div class="ttc" id="c_types_8h_html_a9e382f207c65ca13ab4ae98363aeda80"><div class="ttname"><a href="../../d0/d99/c_types_8h.html#a9e382f207c65ca13ab4ae98363aeda80">s8</a></div><div class="ttdeci">int8_t s8</div><div class="ttdef"><b>Definition:</b> <a href="../../d0/d99/c_types_8h_source.html#l00021">cTypes.h:21</a></div></div>
<div class="ttc" id="struct_cheetah_visualization_html_a78d3a586c160f8ec983f65f1605bacb1"><div class="ttname"><a href="../../d0/d6d/struct_cheetah_visualization.html#a78d3a586c160f8ec983f65f1605bacb1">CheetahVisualization::color</a></div><div class="ttdeci">Vec4&lt; float &gt; color</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d0d/_visualization_data_8h_source.html#l00041">VisualizationData.h:41</a></div></div>
<div class="ttc" id="rt__spi_8h_html"><div class="ttname"><a href="../../d0/dae/rt__spi_8h.html">rt_spi.h</a></div></div>
<div class="ttc" id="class_control_parameter_collection_html_a9e6262aa46992ca879b50d70df030a56"><div class="ttname"><a href="../../dd/da1/class_control_parameter_collection.html#a9e6262aa46992ca879b50d70df030a56">ControlParameterCollection::lookup</a></div><div class="ttdeci">ControlParameter &amp; lookup(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00095">ControlParameters.h:95</a></div></div>
<div class="ttc" id="rt__spi_8h_html_a8eb9780a3438ec02c70314744f91f3c7"><div class="ttname"><a href="../../d0/dae/rt__spi_8h.html#a8eb9780a3438ec02c70314744f91f3c7">init_spi</a></div><div class="ttdeci">void init_spi()</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/d62/rt__spi_8cpp_source.html#l00110">rt_spi.cpp:110</a></div></div>
<div class="ttc" id="class_robot_runner_html_a1738f8f82abdedc10c25e0360fba2dec"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#a1738f8f82abdedc10c25e0360fba2dec">RobotRunner::controlParameters</a></div><div class="ttdeci">RobotControlParameters * controlParameters</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00054">RobotRunner.h:54</a></div></div>
<div class="ttc" id="_control_parameters_8h_html_a845e4adacbcbd157527c891bb3fa4b74"><div class="ttname"><a href="../../d2/d01/_control_parameters_8h.html#a845e4adacbcbd157527c891bb3fa4b74">controlParameterValueToString</a></div><div class="ttdeci">std::string controlParameterValueToString(ControlParameterValue v, ControlParameterValueKind kind)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d90/_control_parameters_8cpp_source.html#l00034">ControlParameters.cpp:34</a></div></div>
<div class="ttc" id="struct_gamepad_command_html_ae4c2dcd871479b0a41b942736a2698a3"><div class="ttname"><a href="../../d4/d51/struct_gamepad_command.html#ae4c2dcd871479b0a41b942736a2698a3">GamepadCommand::set</a></div><div class="ttdeci">void set(const gamepad_lcmt *lcmt)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d24/_gamepad_command_8h_source.html#l00041">GamepadCommand.h:41</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a4a8078bc3b30d7260281598990243262"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a4a8078bc3b30d7260281598990243262">HardwareBridge::initCommon</a></div><div class="ttdeci">void initCommon()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00030">HardwareBridge.cpp:30</a></div></div>
<div class="ttc" id="rt__spi_8h_html_a86aa57487cebed6685ec3a22729662e6"><div class="ttname"><a href="../../d0/dae/rt__spi_8h.html#a86aa57487cebed6685ec3a22729662e6">get_spi_data</a></div><div class="ttdeci">spi_data_t * get_spi_data()</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/d62/rt__spi_8cpp_source.html#l00337">rt_spi.cpp:337</a></div></div>
<div class="ttc" id="class_periodic_member_function_html"><div class="ttname"><a href="../../dd/de7/class_periodic_member_function.html">PeriodicMemberFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="../../dc/d87/_periodic_task_8h_source.html#l00109">PeriodicTask.h:109</a></div></div>
<div class="ttc" id="rt__sbus_8h_html"><div class="ttname"><a href="../../d1/d95/rt__sbus_8h.html">rt_sbus.h</a></div></div>
<div class="ttc" id="struct_vector_nav_data_html_a373f86342f6a3c2b2b2ca995eb67ff58"><div class="ttname"><a href="../../df/d06/struct_vector_nav_data.html#a373f86342f6a3c2b2b2ca995eb67ff58">VectorNavData::quat</a></div><div class="ttdeci">Quat&lt; float &gt; quat</div><div class="ttdef"><b>Definition:</b> <a href="../../d0/df2/_i_m_u_types_8h_source.html#l00016">IMUTypes.h:16</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a92eb174542c2885280ad77c257d887b8"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a92eb174542c2885280ad77c257d887b8">HardwareBridge::initError</a></div><div class="ttdeci">void initError(const char *reason, bool printErrno=false)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00017">HardwareBridge.cpp:17</a></div></div>
<div class="ttc" id="_hardware_bridge_8h_html_accbb358028675c83675d8b34c386268d"><div class="ttname"><a href="../../d6/dd5/_hardware_bridge_8h.html#accbb358028675c83675d8b34c386268d">MAX_STACK_SIZE</a></div><div class="ttdeci">#define MAX_STACK_SIZE</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00012">HardwareBridge.h:12</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aac1696d3ecb97c660ffd9a13771892a9"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aac1696d3ecb97c660ffd9a13771892a9">HardwareBridge::_interfaceLcmThread</a></div><div class="ttdeci">std::thread _interfaceLcmThread</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00065">HardwareBridge.h:65</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aa700e6321dfd8badb647e198349d3fb7"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aa700e6321dfd8badb647e198349d3fb7">HardwareBridge::_spiData</a></div><div class="ttdeci">SpiData _spiData</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00058">HardwareBridge.h:58</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aa63048fffaaddf1c55a8f18a785396ec"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aa63048fffaaddf1c55a8f18a785396ec">HardwareBridge::statusTask</a></div><div class="ttdeci">PrintTaskStatus statusTask</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00051">HardwareBridge.h:51</a></div></div>
<div class="ttc" id="rt__sbus_8h_html_ab44d038981e16325d8aec78b2c1011bf"><div class="ttname"><a href="../../d1/d95/rt__sbus_8h.html#ab44d038981e16325d8aec78b2c1011bf">receive_sbus</a></div><div class="ttdeci">int receive_sbus(int port)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/dad/rt__sbus_8cpp_source.html#l00108">rt_sbus.cpp:108</a></div></div>
<div class="ttc" id="class_mini_cheetah_hardware_bridge_html_aa99804e2d2e2041ab988f34f15e385ae"><div class="ttname"><a href="../../d0/dc5/class_mini_cheetah_hardware_bridge.html#aa99804e2d2e2041ab988f34f15e385ae">MiniCheetahHardwareBridge::_vectorNavData</a></div><div class="ttdeci">VectorNavData _vectorNavData</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00082">HardwareBridge.h:82</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a0389f737fe143e8a4bbf9433c129d149"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a0389f737fe143e8a4bbf9433c129d149">HardwareBridge::taskManager</a></div><div class="ttdeci">PeriodicTaskManager taskManager</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00050">HardwareBridge.h:50</a></div></div>
<div class="ttc" id="_hardware_bridge_8h_html_a82dd0a9ae27bdb2c3cdd33bb7804861c"><div class="ttname"><a href="../../d6/dd5/_hardware_bridge_8h.html#a82dd0a9ae27bdb2c3cdd33bb7804861c">TASK_PRIORITY</a></div><div class="ttdeci">#define TASK_PRIORITY</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00013">HardwareBridge.h:13</a></div></div>
<div class="ttc" id="class_robot_runner_html_a8c74848e52f20b1294d650641f40ea4f"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#a8c74848e52f20b1294d650641f40ea4f">RobotRunner::visualizationData</a></div><div class="ttdeci">VisualizationData * visualizationData</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00055">RobotRunner.h:55</a></div></div>
<div class="ttc" id="class_periodic_task_html_a23a65ac2dff9750a0f0d6416f2f32a6f"><div class="ttname"><a href="../../de/d2f/class_periodic_task.html#a23a65ac2dff9750a0f0d6416f2f32a6f">PeriodicTask::start</a></div><div class="ttdeci">void start()</div><div class="ttdef"><b>Definition:</b> <a href="../../de/df7/_periodic_task_8cpp_source.html#l00020">PeriodicTask.cpp:20</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_ad52a70b35d6c19a736ea3287d974c66d"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#ad52a70b35d6c19a736ea3287d974c66d">HardwareBridge::_robotParams</a></div><div class="ttdeci">RobotControlParameters _robotParams</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00063">HardwareBridge.h:63</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_ae6905c9dcc7d67badb4bcd79ef6f62a1"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#ae6905c9dcc7d67badb4bcd79ef6f62a1">HardwareBridge::handleGamepadLCM</a></div><div class="ttdeci">void handleGamepadLCM(const lcm::ReceiveBuffer *rbuf, const std::string &amp;chan, const gamepad_lcmt *msg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00084">HardwareBridge.cpp:84</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_ae259e674ae1cd4f3043fdd0236038617"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#ae259e674ae1cd4f3043fdd0236038617">HardwareBridge::_robotRunner</a></div><div class="ttdeci">RobotRunner * _robotRunner</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00062">HardwareBridge.h:62</a></div></div>
<div class="ttc" id="rt__spi_8h_html_a3e61e97e0ec55d0c36c2883793c12c08"><div class="ttname"><a href="../../d0/dae/rt__spi_8h.html#a3e61e97e0ec55d0c36c2883793c12c08">get_spi_command</a></div><div class="ttdeci">spi_command_t * get_spi_command()</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/d62/rt__spi_8cpp_source.html#l00332">rt_spi.cpp:332</a></div></div>
<div class="ttc" id="class_hardware_bridge_html"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html">HardwareBridge</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00023">HardwareBridge.h:23</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_af9442d44776906a9a3c9cea911784891"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#af9442d44776906a9a3c9cea911784891">HardwareBridge::_mainCheetahVisualization</a></div><div class="ttdeci">CheetahVisualization _mainCheetahVisualization</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/dd5/_hardware_bridge_8h_source.html#l00054">HardwareBridge.h:54</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_aa3e2460f9609470b32190353d9da2cd9"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#aa3e2460f9609470b32190353d9da2cd9">HardwareBridge::run_sbus</a></div><div class="ttdeci">void run_sbus()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00266">HardwareBridge.cpp:266</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_abbe4b85c2153d1c4f9718b678587cc7b"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#abbe4b85c2153d1c4f9718b678587cc7b">HardwareBridge::prefaultStack</a></div><div class="ttdeci">void prefaultStack()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00060">HardwareBridge.cpp:60</a></div></div>
<div class="ttc" id="class_robot_runner_html_ac36f7f6395167f998afe23f6d4f86c82"><div class="ttname"><a href="../../d9/d42/class_robot_runner.html#ac36f7f6395167f998afe23f6d4f86c82">RobotRunner::robotType</a></div><div class="ttdeci">RobotType robotType</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d41/_robot_runner_8h_source.html#l00047">RobotRunner.h:47</a></div></div>
<div class="ttc" id="class_hardware_bridge_html_a6b4e33274b7f6f1a78987d9b5480f9b5"><div class="ttname"><a href="../../d8/dd8/class_hardware_bridge.html#a6b4e33274b7f6f1a78987d9b5480f9b5">HardwareBridge::setupScheduler</a></div><div class="ttdeci">void setupScheduler()</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/da0/_hardware_bridge_8cpp_source.html#l00075">HardwareBridge.cpp:75</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="../../dir_43e0a1f539e00dcfa1a6bc4d4fee4fc2.html">home</a></li><li class="navelem"><a class="el" href="../../dir_61bfb0b3cdda81b1b0355ba34eb3b1eb.html">dhkim</a></li><li class="navelem"><a class="el" href="../../dir_adee5b101e079090017bb4e91c628ead.html">Public_Repository</a></li><li class="navelem"><a class="el" href="../../dir_7fc07a7b97001e7b1d18e11da761e2de.html">Cheetah-Software</a></li><li class="navelem"><a class="el" href="../../dir_e69772fee2c25f3f3a3da98250dcdda2.html">robot</a></li><li class="navelem"><a class="el" href="../../dir_027de6e2baa5cad9e7e386445d8c74b0.html">src</a></li><li class="navelem"><a class="el" href="../../d9/da0/_hardware_bridge_8cpp.html">HardwareBridge.cpp</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>
